package com.atguigu.lease.web.controller.login;


import com.atguigu.lease.result.Result;
import com.atguigu.lease.web.service.LoginService;
import com.atguigu.lease.web.vo.login.CaptchaVo;
import com.atguigu.lease.web.vo.login.LoginVo;
import com.atguigu.lease.web.vo.system.user.SystemUserInfoVo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@Tag(name = "后台管理系统登录管理")
@RestController
@RequestMapping("/admin")
public class LoginController {

    @Autowired
    private LoginService loginService;

    /**
     * token由三部分组成，每部分用.隔开
     *      头部，用什么加密算法
     *      负载，过期时间、账号信息
     *      签名，负载加密后的密文内容
     *
     * token具体使用：
     *      1. token生成
     *      2. token校验
     *      3. 导入jwttoken依赖 jwt - json web token
     */

    /**
     * 导入生成验证码工具
     * 导入redis的场景启动器，redis的连接配置
     * 生成验证码图片和正确验证码
     * 生成uuid
     * 将uuid和正确验证码存储到redis
     * 验证码图片和uuid vo -> result.ok(vo)
     */
    @Operation(summary = "获取图形验证码")
    @GetMapping("login/captcha")
    public Result<CaptchaVo> getCaptcha() {
        CaptchaVo captchaVo = loginService.customGetCaptcha();
        return Result.ok(captchaVo);
    }

    @Operation(summary = "登录")
    @PostMapping("login")
    public Result<String> login(@RequestBody LoginVo loginVo) {
        String token = loginService.customLogin(loginVo);
        return Result.ok(token);
    }

    @Operation(summary = "获取登陆用户个人信息")
    @GetMapping("info")
    public Result<SystemUserInfoVo> info(@RequestHeader String access_token) {
        SystemUserInfoVo systemUserInfoVo = loginService.customInfo(access_token);
        return Result.ok(systemUserInfoVo);
    }
}